// 启动服务器 nodemon.cmd server.js

// 1 - 引入express
const express = require('express');

// 2 - 创建应用对象
const app = express();

// 3 - 创建路由规则
// resquest - 对请求报文的封装, response - 对响应报文的封装
// '/' - 随着url路径改变

// get请求时
app.get('/server', (request, response) => {
    // 设置响应头, 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*');

    // 设置响应体
    response.send('HELLO AJAX GET');
});

// post请求时 all表示接收任意类型请求(需要自定义响应头时设置为all)
app.all('/server', (request, response) => {
    // 设置响应头, 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*');
    // 设置接受所有类型的响应头
    response.setHeader('Access-Control-Allow-Headers', '*');

    // 设置响应体
    response.send('HELLO AJAX POST');
});

// 针对JSON问题
app.all('/json-server', (request, response) => {
    // 设置响应头, 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*');
    // 设置接受所有类型的响应头
    response.setHeader('Access-Control-Allow-Headers', '*');

    // 响应一个数据
    const data = {
        name: 'JSON'
    };
    // 把对象转换成字符串
    let str = JSON.stringify(data);

    // 设置响应体(send中只能有字符串或ArrayBuffer)
    response.send(str);
});

// 针对IE缓存问题
app.get('/ie-server', (request, response) => {
    // 设置响应头, 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*');

    // 设置响应体
    response.send('HELLO AJAX IE2');
});

// 请求超时&网络异常问题
app.get('/delay-server', (request, response) => {
    // 设置响应头, 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*');

    // 设置响应体
    setTimeout(() => {
        response.send('HELLO AJAX DELAY');
    }, 3000);
});

// aixos 服务
app.all('/axios-server', (request, response) => {
    // 设置响应头, 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*');
    // 设置接受所有类型的响应头
    response.setHeader('Access-Control-Allow-Headers', '*');

    // 设置响应体
    const data = { name: 'axios' };
    response.send(JSON.stringify(data));

});

// fetch 服务
app.all('/fetch-server', (request, response) => {
    // 设置响应头, 设置允许跨域
    response.setHeader('Access-Control-Allow-Origin', '*');
    // 设置接受所有类型的响应头
    response.setHeader('Access-Control-Allow-Headers', '*');

    // 设置响应体
    const data = { name: 'fetch' };
    response.send(JSON.stringify(data));

});

// 4 - 监听窗口启动服务
app.listen(8000, () => {
    console.log('服务已启动, 在8000端口监听');
})